home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / msdos / mcpr / mcpfrm.asm < prev    next >
Assembly Source File  |  1991-10-18  |  6KB  |  342 lines

  1.     page    95,132
  2. ;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
  3. ;§                                                                          §
  4. ;§            マルチカラム コンパクト プリント ユーティリティ            §
  5. ;§                                                                          §
  6. ;§   Multicolumn Compact PRint utility   MCPR.EXE  Ver1.40    §
  7. ;§   ~           ~       ~~                                                 §
  8. ;§              Copyright (C) by 福地 邦雄 1989-1990. All rights reserved.  §
  9. ;§∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞§
  10.     public    formprint
  11.     public    inline
  12.     public    curclm
  13.     public    curlin
  14.     public    curblk
  15.     public    curpage
  16.     public    linumber
  17.     public    printend
  18.     public    hdrpgnum
  19.     public    hdrlinoff
  20.     public    hdrlinseg
  21.     public    hdrln2seg
  22.     public    linptr
  23.     extrn    initvaliable:near
  24.     extrn    initpgbuff:near
  25.     extrn    reducepagebuff:near
  26.     extrn    getchar:near
  27.     extrn    ungetchar:near
  28.     extrn    fillineproc:near
  29.     extrn    filgapproc:near
  30.     extrn    hdrpgupdate:near
  31.     extrn    codeprint:near
  32.     extrn    bitprint:near
  33.     extrn    setlinumber:near
  34.     extrn    feedprint:near
  35. ;
  36. YES    equ    1
  37. NO    equ    0
  38. TAB    equ    9
  39. CR    equ    0dh
  40. LF    equ    0ah
  41. FF    equ    0ch
  42. DEL    equ    7fh
  43. ;
  44. data    segment para    public    'DATA'
  45. ;
  46. extrn    startpage:word
  47. extrn    lastpage:word
  48. extrn    clmcnt:word
  49. extrn    lincnt:word
  50. extrn    blkcnt:word
  51. extrn    formfeed:word
  52. extrn    hdrprint:word
  53. extrn    linumb:word
  54. extrn    numclm:word
  55. extrn    clmpitch:word
  56. extrn    tabcount:word
  57. extrn    pageproc:word
  58. ;
  59. linumber    dw        ?
  60. curclm        dw        ?
  61. curlin        dw        ?
  62. curblk        dw        ?
  63. curpage        dw        ?
  64. inline        dw        ?
  65. srcoff        dw        ?
  66. printend    dw        ?
  67. feedwork    dw        ?
  68. ;
  69. lchclm        dw        ?
  70. ;
  71. hdrpgnum    dw        ?
  72. hdrlinoff   dw        0
  73. hdrlinseg   dw        0
  74.         dw        0
  75. hdrln2seg   dw        0
  76. linptr        dd        256 dup(?)
  77. ;
  78. linbuf        db        410h dup(?)
  79. ;
  80. data    ends
  81. ;
  82. code    segment para    public    'CODE'
  83.     assume    cs:code,ds:data
  84. ;
  85. formprint   proc
  86. ;
  87.     cld
  88.     call    initvaliable
  89.     call    initpgbuff
  90. makepageloop:
  91.     inc    linumber
  92.     call    fgets
  93.     jz    lineproc
  94.     jmp    endoffile
  95. lineproc:
  96.     mov    si,offset linbuf
  97.     call    [pageproc]
  98.     jnz    makepageloop
  99. ;
  100.     mov    si,offset linbuf
  101.     mov    srcoff,si
  102.     cmp    byte ptr [si],FF
  103.     jne    nofeed
  104.     inc    srcoff
  105.     mov    al,' '
  106.     mov    bx,curlin
  107.     test    bx,bx
  108.     jz    nofeed
  109.     mov    dx,lincnt
  110.     sub    dx,bx
  111.     ja    setspc
  112.     jmp    nextcolums
  113. setspc:
  114.     shl    bx,1
  115.     shl    bx,1
  116.     add    bx,offset linptr
  117.     mov    si,clmcnt
  118.     cmp    linumb,YES
  119.     jne    feedloop
  120.     add    si,numclm
  121.     inc    si
  122. feedloop:
  123.     mov    cx,si
  124.     les    di,[bx]
  125.     rep stosb
  126.     mov    [bx],di
  127.     lea    bx,[bx+4]
  128.     dec    dx
  129.     jnz    feedloop
  130.     jmp    nextcolums
  131. nofeed:
  132.     mov    curclm,0
  133.     call    setlinumber
  134.     mov    si,srcoff
  135. copyline:
  136.     lodsb
  137.     test    al,al
  138.     jz    eol
  139.     mov    cx,curclm
  140.     cmp    cx,clmcnt
  141.     jae    foldline
  142.     cmp    al,81h
  143.     jb    cpyank
  144.     cmp    al,0a0h
  145.     jb    cpyknj
  146.     cmp    al,0e0h
  147.     jb    cpyank
  148. cpyknj:
  149.     inc    cx
  150.     cmp    cx,clmcnt
  151.     jae    foldline
  152.     mov    ah,al
  153.     lodsb
  154.     xchg    ah,al
  155.     stosw
  156.     add    curclm,2
  157.     jmp    short copyline
  158. cpyank:
  159.     stosb
  160.     inc    curclm
  161.     jmp    short copyline
  162. eol:
  163.     mov    inline,NO
  164. foldline:
  165.     dec    si
  166.     mov    srcoff,si
  167.     call    fillineproc
  168.     inc    curlin
  169.     mov    ax,curlin
  170.     cmp    ax,lincnt
  171.     jae    nextcolums
  172.     jmp    lbfchk
  173. nextcolums:
  174.     mov    curlin,0
  175.     inc    curblk
  176.     mov    ax,curblk
  177.     cmp    ax,blkcnt
  178.     jae    pageend
  179. ;
  180.     call    filgapproc
  181.     jmp    lbfchk
  182. endoffile:
  183.     mov    printend,YES
  184. pageend:
  185.     mov    curblk,0
  186.     mov    ax,curpage
  187.     cmp    ax,startpage
  188.     jb    pageskip
  189.     call    reducepagebuff
  190.     jz    noprint
  191.     mov    feedwork,ax
  192.     cmp    clmpitch,3
  193.     je    bitimgprt
  194.     call    codeprint
  195.     jmp    short prtend
  196. bitimgprt:
  197.     call    bitprint
  198. prtend:
  199.     mov    ax,feedwork
  200.     call    feedprint
  201. pageskip:
  202.     call    initpgbuff
  203. noprint:
  204.     cmp    printend,NO
  205.     jne    filend
  206.     inc    curpage
  207.     call    hdrpgupdate
  208.     mov    ax,curpage
  209.     cmp    ax,lastpage
  210.     ja    filend
  211. lbfchk:
  212.     mov    si,srcoff
  213.     cmp    byte ptr [si],0
  214.     jne    existlbf
  215.     jmp    makepageloop
  216. existlbf:
  217.     jmp    nofeed
  218. filend:
  219.     ret
  220. ;
  221. formprint   endp
  222. ;
  223. fgets    proc
  224. ;
  225.     mov    lchclm,0
  226.     mov    di,ds
  227.     mov    es,di
  228.     mov    di,offset linbuf
  229. ;
  230. makelineloop:
  231.     cmp    di,(offset linbuf)+400h
  232.     jb    nextchar
  233.     jmp    endofline
  234. nextchar:
  235.     call    getchar
  236.     jnz    endofline
  237. ;
  238.     cmp    al,' '
  239.     jb    codectrl
  240.     cmp    al,DEL
  241.     jb    codeank
  242.     cmp    al,81h
  243.     jb    codeskip
  244.     cmp    al,0a0h
  245.     jb    codekanji
  246.     cmp    al,0e0h
  247.     jb    codeank
  248.     cmp    al,0fch
  249.     jbe    codekanji
  250. codeskip:
  251.     jmp    short makelineloop
  252. codeank:
  253.     stosb
  254.     inc    lchclm
  255.     jmp    short makelineloop
  256. codectrl:
  257.     cmp    al,TAB
  258.     jne    chckff
  259.     call    tabproc
  260.     jmp    short makelineloop
  261. chckff:    cmp    al,FF
  262.     jne    chcklf
  263.     cmp    lchclm,0
  264.     jne    existchr
  265.     cmp    curlin,0
  266.     je    makelineloop
  267.     cmp    formfeed,YES
  268.     jne    endofline
  269.     cmp    di,offset linbuf
  270.     jne    makelineloop
  271.     stosb
  272.     jmp    short makelineloop
  273. existchr:
  274.     cmp    formfeed,YES
  275.     je    eolunget
  276.     jmp    short endofline
  277. chcklf:    cmp    al,LF
  278.     je    endofline
  279.     cmp    al,CR
  280.     jne    makelineloop
  281. reinput:
  282.     call    getchar
  283.     jnz    endofline
  284.     cmp    al,0ah
  285.     je    endofline
  286.     cmp    al,0dh
  287.     je    reinput
  288. eolunget:
  289.     call    ungetchar
  290. endofline:
  291.     xor    al,al
  292.     stosb
  293.     cmp    lchclm,0
  294.     je    eofchk
  295.     xor    ax,ax
  296. eofchk:
  297.     test    ax,ax
  298.     ret
  299. ;
  300. codekanji:
  301.     mov    dl,al
  302.     call    getchar
  303.     cmp    al,40h
  304.     jb    undefcode
  305.     cmp    al,7fh
  306.     je    undefcode
  307.     cmp    al,0fch
  308.     ja    undefcode
  309.     mov    ah,al
  310.     mov    al,dl
  311.     jmp    short setwcode
  312. undefcode:
  313.     mov    ax,'  '
  314. setwcode:
  315.     stosw
  316.     add    lchclm,2
  317.     jmp    makelineloop
  318. ;
  319. fgets    endp
  320. ;
  321. tabproc    proc
  322. ;
  323.     mov    al,' '
  324.     mov    cx,lchclm
  325.     add    cx,tabcount
  326.     xchg    ax,cx
  327.     push    dx
  328.     cwd
  329.     div    tabcount
  330.     mul    tabcount
  331.     pop    dx
  332.     xchg    ax,cx
  333.     sub    cx,lchclm
  334.     add    lchclm,cx
  335.     rep stosb
  336.     ret
  337. ;
  338. tabproc    endp
  339. ;
  340. code    ends
  341.     end
  342.